// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()
const _ = db.command

//引用TcbRouter
const TcbRouter = require('tcb-router')

const utils = require('./utils')

/**
 * 成功的数据结构
 */
const getSuccessData = (data = {}) => ({
  status: 200,
  data: {
    status: 0,
    data
  }
})

/**
 * 失败的数据结构
 */
const getFailData = (data = {}) => ({
  status: 401,
  data: {
    ...data
  }
})

// 云函数入口函数
exports.main = async (event, context) => {
  const app = new TcbRouter({
    event
  })

  /**
   * 初始化 走进永昌 的二级界面图片
   */
  app.router('/go/imagesOfTitles', async (ctx, next) => {

    try {
      const {
        result
      } = await cloud.callFunction({
        name: 'go',
        data: {
          $url: '/imagesOfTitles',
          other: {}
        }
      })

      ctx.body = getSuccessData(result.data.data)

    } catch (error) {

      ctx.body = getFailData({
        status: 1,
        msg: '获取二级详情界面的标题图片失败',
        error
      })

    }

  })
  /**
   * 获取“永昌服务”的detail_two的具体内容。
   */
  app.router('/go/serveDetailTwo', async (ctx, next) => {

    // 这是“走进永昌”，这个一级分类的id
    const pCategoryId = '5de31d24b0f80726901430c9'
    // 永昌服务 这个二级分类的id
    const categoryId = '5de32f766896be05f40883b3'

    try {
      const {
        data
      } = await db.collection("products").where({
        pCategoryId,
        categoryId,
      }).get()

      ctx.body = getSuccessData(data)

    } catch (error) {

      ctx.body = getFailData({
        status: 1,
        msg: '获取“走进永昌/案例展示”信息失败。',
        error
      })

    }

  })
  /**
   * 获取“案例展示”的detail_two的具体内容。
   */
  app.router('/go/showDetailTwo', async (ctx, next) => {

    // 这是“走进永昌”，这个一级分类的id
    const pCategoryId = '5de31d24b0f80726901430c9'
    // 案例展示 这个二级分类的id
    const categoryId = '5de32f806896be05f40883b4'

    try {
      const {
        data
      } = await db.collection("products").where({
        pCategoryId,
        categoryId,
      }).get()

      ctx.body = getSuccessData(data)

    } catch (error) {

      ctx.body = getFailData({
        status: 1,
        msg: '获取“走进永昌/案例展示”信息失败。',
        error
      })

    }

  })
  /**
   * 接收留言板的信息
   * 也可以接收留言状态的更新
   */
  app.router('/go/messageBoard', async (ctx, next) => {

    const {
      userInfo,
      name,
      phone,
      textarea,
    } = event.other

    try {

      await db.collection("message_boards").add({
        data: {
          userInfo,
          name,
          phone,
          textarea,
          status: '0'
        }
      })

      ctx.body = getSuccessData()

    } catch (error) {

      ctx.body = getFailData({
        status: 1,
        msg: '留言板添加信息失败。',
        error
      })

    }

  })
  /**
   * 获取“走进永昌”（5de31d24b0f80726901430c9）页面的所有信息。包括轮播图等。
   * 返回 products 等等所有表格中的 pCategoryId 等于5de31d24b0f80726901430c9的信息。
   */
  app.router('/go/initIndex', async (ctx, next) => {
    const {
      userinfo
    } = event.other
    // 这是“走进永昌”，这个一级分类的id
    const pCategoryId = '5de31d24b0f80726901430c9'
    // 过滤 轮播图
    const filterId = '5de328e2e887230e08f4fdf8'
    const wxContext = cloud.getWXContext()

    try {
      // 同时要查找那些status === 1的数据，status === 2 表示“已经下线”
      const {
        data: resultProduct
      } = await db.collection("products").where({
        pCategoryId,
        status: 1
      }).get()
      const dataProduct = utils.goDataFilter(resultProduct)
      const {
        data: resultCategory
      } = await db.collection("categorys").where({
        parentId: pCategoryId
      }).get()
      // 这里要 转化为string类型
      const dataCategory = resultCategory
        .filter((item) => item._id + '' !== filterId)
        .map((item) => ({
          text: item.name
        }))
      let temp = {
        ...dataCategory[2]
      }
      dataCategory[2] = {
        ...dataCategory[3]
      }
      dataCategory[3] = temp

      // 这里的图片是小程序里面的，不用下载。
      dataCategory[0].url = '/images/index/nav_service.png'
      dataCategory[1].url = '/images/index/nav_show.png'
      dataCategory[2].url = '/images/index/nav_center.png'
      dataCategory[3].url = '/images/index/nav_about.png'
      dataCategory[4].url = '/images/index/nav_call.png'

      /**
       * 在集合users中记录当前的用户信息。
       * 试验：是否一定要在client中让用户授权，后端才能记录？
       */
      const {
        data
      } = await db.collection("users").add({
        data: {
          openid: wxContext.OPENID,
          appid: wxContext.APPID,
          unionid: wxContext.UNIONID,
          userinfo
        }
      })

      ctx.body = getSuccessData({
        ...dataProduct,
        listNav: dataCategory,
        openid: wxContext.OPENID,
        appid: wxContext.APPID,
        unionid: wxContext.UNIONID,
      })

    } catch (error) {

      ctx.body = getFailData({
        status: 1,
        msg: '获取“走进永昌”信息失败。',
        error
      })

    }
  })

  return app.serve()
}